(function() {
    var d = tinymce.DOM, b = tinymce.dom.Element, a = tinymce.dom.Event, e = tinymce.each, c = tinymce.is;
    tinymce.create("tinymce.plugins.InlinePopups", {init: function(f, g) {
            f.onBeforeRenderUI.add(function() {
                f.windowManager = new tinymce.InlineWindowManager(f);
                d.loadCSS(g + "/skins/" + (f.settings.inlinepopups_skin || "clearlooks2") + "/window.css")
            })
        }, getInfo: function() {
            return{longname: "InlinePopups", author: "Moxiecode Systems AB", authorurl: "http://tinymce.moxiecode.com", infourl: "http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups", version: tinymce.majorVersion + "." + tinymce.minorVersion}
        }});
    tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager", {InlineWindowManager: function(f) {
            var g = this;
            g.parent(f);
            g.zIndex = 300000;
            g.count = 0;
            g.windows = {}
        }, open: function(s, j) {
            var z = this, i, k = "", r = z.editor, g = 0, v = 0, h, m, o, q, l, x, y, n;
            s = s || {};
            j = j || {};
            if (!s.inline) {
                return z.parent(s, j)
            }
            n = z._frontWindow();
            if (n && d.get(n.id + "_ifr")) {
                n.focussedElement = d.get(n.id + "_ifr").contentWindow.document.activeElement
            }
            if (!s.type) {
                z.bookmark = r.selection.getBookmark(1)
            }
            i = d.uniqueId();
            h = d.getViewPort();
            s.width = parseInt(s.width || 320);
            s.height = parseInt(s.height || 240) + (tinymce.isIE ? 8 : 0);
            s.min_width = parseInt(s.min_width || 150);
            s.min_height = parseInt(s.min_height || 100);
            s.max_width = parseInt(s.max_width || 2000);
            s.max_height = parseInt(s.max_height || 2000);
            s.left = s.left || Math.round(Math.max(h.x, h.x + (h.w / 2) - (s.width / 2)));
            s.top = s.top || Math.round(Math.max(h.y, h.y + (h.h / 2) - (s.height / 2)));
            s.movable = s.resizable = true;
            j.mce_width = s.width;
            j.mce_height = s.height;
            j.mce_inline = true;
            j.mce_window_id = i;
            j.mce_auto_focus = s.auto_focus;
            z.features = s;
            z.params = j;
            z.onOpen.dispatch(z, s, j);
            if (s.type) {
                k += " mceModal";
                if (s.type) {
                    k += " mce" + s.type.substring(0, 1).toUpperCase() + s.type.substring(1)
                }
                s.resizable = false
            }
            if (s.statusbar) {
                k += " mceStatusbar"
            }
            if (s.resizable) {
                k += " mceResizable"
            }
            if (s.minimizable) {
                k += " mceMinimizable"
            }
            if (s.maximizable) {
                k += " mceMaximizable"
            }
            if (s.movable) {
                k += " mceMovable"
            }
            z._addAll(d.doc.body, ["div", {id: i, role: "dialog", "aria-labelledby": s.type ? i + "_content" : i + "_title", "class": (r.settings.inlinepopups_skin || "clearlooks2") + (tinymce.isIE && window.getSelection ? " ie9" : ""), style: "width:100px;height:100px"}, ["div", {id: i + "_wrapper", "class": "mceWrapper" + k}, ["div", {id: i + "_top", "class": "mceTop"}, ["div", {"class": "mceLeft"}], ["div", {"class": "mceCenter"}], ["div", {"class": "mceRight"}], ["span", {id: i + "_title"}, s.title || ""]], ["div", {id: i + "_middle", "class": "mceMiddle"}, ["div", {id: i + "_left", "class": "mceLeft", tabindex: "0"}], ["span", {id: i + "_content"}], ["div", {id: i + "_right", "class": "mceRight", tabindex: "0"}]], ["div", {id: i + "_bottom", "class": "mceBottom"}, ["div", {"class": "mceLeft"}], ["div", {"class": "mceCenter"}], ["div", {"class": "mceRight"}], ["span", {id: i + "_status"}, "Content"]], ["a", {"class": "mceMove", tabindex: "-1", href: "javascript:;"}], ["a", {"class": "mceMin", tabindex: "-1", href: "javascript:;", onmousedown: "return false;"}], ["a", {"class": "mceMax", tabindex: "-1", href: "javascript:;", onmousedown: "return false;"}], ["a", {"class": "mceMed", tabindex: "-1", href: "javascript:;", onmousedown: "return false;"}], ["a", {"class": "mceClose", tabindex: "-1", href: "javascript:;", onmousedown: "return false;"}], ["a", {id: i + "_resize_n", "class": "mceResize mceResizeN", tabindex: "-1", href: "javascript:;"}], ["a", {id: i + "_resize_s", "class": "mceResize mceResizeS", tabindex: "-1", href: "javascript:;"}], ["a", {id: i + "_resize_w", "class": "mceResize mceResizeW", tabindex: "-1", href: "javascript:;"}], ["a", {id: i + "_resize_e", "class": "mceResize mceResizeE", tabindex: "-1", href: "javascript:;"}], ["a", {id: i + "_resize_nw", "class": "mceResize mceResizeNW", tabindex: "-1", href: "javascript:;"}], ["a", {id: i + "_resize_ne", "class": "mceResize mceResizeNE", tabindex: "-1", href: "javascript:;"}], ["a", {id: i + "_resize_sw", "class": "mceResize mceResizeSW", tabindex: "-1", href: "javascript:;"}], ["a", {id: i + "_resize_se", "class": "mceResize mceResizeSE", tabindex: "-1", href: "javascript:;"}]]]);
            d.setStyles(i, {top: -10000, left: -10000});
            if (tinymce.isGecko) {
                d.setStyle(i, "overflow", "auto")
            }
            if (!s.type) {
                g += d.get(i + "_left").clientWidth;
                g += d.get(i + "_right").clientWidth;
                v += d.get(i + "_top").clientHeight;
                v += d.get(i + "_bottom").clientHeight
            }
            d.setStyles(i, {top: s.top, left: s.left, width: s.width + g, height: s.height + v});
            y = s.url || s.file;
            if (y) {
                if (tinymce.relaxedDomain) {
                    y += (y.indexOf("?") == -1 ? "?" : "&") + "mce_rdomain=" + tinymce.relaxedDomain
                }
                y = tinymce._addVer(y)
            }
            if (!s.type) {
                d.add(i + "_content", "iframe", {id: i + "_ifr", src: 'javascript:""', frameBorder: 0, style: "border:0;width:10px;height:10px"});
                d.setStyles(i + "_ifr", {width: s.width, height: s.height});
                d.setAttrib(i + "_ifr", "src", y)
            } else {
                d.add(i + "_wrapper", "a", {id: i + "_ok", "class": "mceButton mceOk", href: "javascript:;", onmousedown: "return false;"}, "Ok");
                if (s.type == "confirm") {
                    d.add(i + "_wrapper", "a", {"class": "mceButton mceCancel", href: "javascript:;", onmousedown: "return false;"}, "Cancel")
                }
                d.add(i + "_middle", "div", {"class": "mceIcon"});
                d.setHTML(i + "_content", s.content.replace("\n", "<br />"));
                a.add(i, "keyup", function(f) {
                    var p = 27;
                    if (f.keyCode === p) {
                        s.button_func(false);
                        return a.cancel(f)
                    }
                });
                a.add(i, "keydown", function(f) {
                    var t, p = 9;
                    if (f.keyCode === p) {
                        t = d.select("a.mceCancel", i + "_wrapper")[0];
                        if (t && t !== f.target) {
                            t.focus()
                        } else {
                            d.get(i + "_ok").focus()
                        }
                        return a.cancel(f)
                    }
                })
            }
            o = a.add(i, "mousedown", function(t) {
                var u = t.target, f, p;
                f = z.windows[i];
                z.focus(i);
                if (u.nodeName == "A" || u.nodeName == "a") {
                    if (u.className == "mceClose") {
                        z.close(null, i);
                        return a.cancel(t)
                    } else {
                        if (u.className == "mceMax") {
                            f.oldPos = f.element.getXY();
                            f.oldSize = f.element.getSize();
                            p = d.getViewPort();
                            p.w -= 2;
                            p.h -= 2;
                            f.element.moveTo(p.x, p.y);
                            f.element.resizeTo(p.w, p.h);
                            d.setStyles(i + "_ifr", {width: p.w - f.deltaWidth, height: p.h - f.deltaHeight});
                            d.addClass(i + "_wrapper", "mceMaximized")
                        } else {
                            if (u.className == "mceMed") {
                                f.element.moveTo(f.oldPos.x, f.oldPos.y);
                                f.element.resizeTo(f.oldSize.w, f.oldSize.h);
                                f.iframeElement.resizeTo(f.oldSize.w - f.deltaWidth, f.oldSize.h - f.deltaHeight);
                                d.removeClass(i + "_wrapper", "mceMaximized")
                            } else {
                                if (u.className == "mceMove") {
                                    return z._startDrag(i, t, u.className)
                                } else {
                                    if (d.hasClass(u, "mceResize")) {
                                        return z._startDrag(i, t, u.className.substring(13))
                                    }
                                }
                            }
                        }
                    }
                }
            });
            q = a.add(i, "click", function(f) {
                var p = f.target;
                z.focus(i);
                if (p.nodeName == "A" || p.nodeName == "a") {
                    switch (p.className) {
                        case"mceClose":
                            z.close(null, i);
                            return a.cancel(f);
                        case"mceButton mceOk":
                        case"mceButton mceCancel":
                            s.button_func(p.className == "mceButton mceOk");
                            return a.cancel(f)
                    }
                }
            });
            a.add([i + "_left", i + "_right"], "focus", function(p) {
                var t = d.get(i + "_ifr");
                if (t) {
                    var f = t.contentWindow.document.body;
                    var u = d.select(":input:enabled,*[tabindex=0]", f);
                    if (p.target.id === (i + "_left")) {
                        u[u.length - 1].focus()
                    } else {
                        u[0].focus()
                    }
                } else {
                    d.get(i + "_ok").focus()
                }
            });
            x = z.windows[i] = {id: i, mousedown_func: o, click_func: q, element: new b(i, {blocker: 1, container: r.getContainer()}), iframeElement: new b(i + "_ifr"), features: s, deltaWidth: g, deltaHeight: v};
            x.iframeElement.on("focus", function() {
                z.focus(i)
            });
            if (z.count == 0 && z.editor.getParam("dialog_type", "modal") == "modal") {
                d.add(d.doc.body, "div", {id: "mceModalBlocker", "class": (z.editor.settings.inlinepopups_skin || "clearlooks2") + "_modalBlocker", style: {zIndex: z.zIndex - 1}});
                d.show("mceModalBlocker");
                d.setAttrib(d.doc.body, "aria-hidden", "true")
            } else {
                d.setStyle("mceModalBlocker", "z-index", z.zIndex - 1)
            }
            if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !d.boxModel)) {
                d.setStyles("mceModalBlocker", {position: "absolute", left: h.x, top: h.y, width: h.w - 2, height: h.h - 2})
            }
            d.setAttrib(i, "aria-hidden", "false");
            z.focus(i);
            z._fixIELayout(i, 1);
            if (d.get(i + "_ok")) {
                d.get(i + "_ok").focus()
            }
            z.count++;
            return x
        }, focus: function(h) {
            var g = this, f;
            if (f = g.windows[h]) {
                f.zIndex = this.zIndex++;
                f.element.setStyle("zIndex", f.zIndex);
                f.element.update();
                h = h + "_wrapper";
                d.removeClass(g.lastId, "mceFocus");
                d.addClass(h, "mceFocus");
                g.lastId = h;
                if (f.focussedElement) {
                    f.focussedElement.focus()
                } else {
                    if (d.get(h + "_ok")) {
                        d.get(f.id + "_ok").focus()
                    } else {
                        if (d.get(f.id + "_ifr")) {
                            d.get(f.id + "_ifr").focus()
                        }
                    }
                }
            }
        }, _addAll: function(k, h) {
            var g, l, f = this, j = tinymce.DOM;
            if (c(h, "string")) {
                k.appendChild(j.doc.createTextNode(h))
            } else {
                if (h.length) {
                    k = k.appendChild(j.create(h[0], h[1]));
                    for (g = 2; g < h.length; g++) {
                        f._addAll(k, h[g])
                    }
                }
            }
        }, _startDrag: function(v, G, E) {
            var o = this, u, z, C = d.doc, f, l = o.windows[v], h = l.element, y = h.getXY(), x, q, F, g, A, s, r, j, i, m, k, n, B;
            g = {x: 0, y: 0};
            A = d.getViewPort();
            A.w -= 2;
            A.h -= 2;
            j = G.screenX;
            i = G.screenY;
            m = k = n = B = 0;
            u = a.add(C, "mouseup", function(p) {
                a.remove(C, "mouseup", u);
                a.remove(C, "mousemove", z);
                if (f) {
                    f.remove()
                }
                h.moveBy(m, k);
                h.resizeBy(n, B);
                q = h.getSize();
                d.setStyles(v + "_ifr", {width: q.w - l.deltaWidth, height: q.h - l.deltaHeight});
                o._fixIELayout(v, 1);
                return a.cancel(p)
            });
            if (E != "Move") {
                D()
            }
            function D() {
                if (f) {
                    return
                }
                o._fixIELayout(v, 0);
                d.add(C.body, "div", {id: "mceEventBlocker", "class": "mceEventBlocker " + (o.editor.settings.inlinepopups_skin || "clearlooks2"), style: {zIndex: o.zIndex + 1}});
                if (tinymce.isIE6 || (tinymce.isIE && !d.boxModel)) {
                    d.setStyles("mceEventBlocker", {position: "absolute", left: A.x, top: A.y, width: A.w - 2, height: A.h - 2})
                }
                f = new b("mceEventBlocker");
                f.update();
                x = h.getXY();
                q = h.getSize();
                s = g.x + x.x - A.x;
                r = g.y + x.y - A.y;
                d.add(f.get(), "div", {id: "mcePlaceHolder", "class": "mcePlaceHolder", style: {left: s, top: r, width: q.w, height: q.h}});
                F = new b("mcePlaceHolder")
            }
            z = a.add(C, "mousemove", function(w) {
                var p, H, t;
                D();
                p = w.screenX - j;
                H = w.screenY - i;
                switch (E) {
                    case"ResizeW":
                        m = p;
                        n = 0 - p;
                        break;
                    case"ResizeE":
                        n = p;
                        break;
                    case"ResizeN":
                    case"ResizeNW":
                    case"ResizeNE":
                        if (E == "ResizeNW") {
                            m = p;
                            n = 0 - p
                        } else {
                            if (E == "ResizeNE") {
                                n = p
                            }
                        }
                        k = H;
                        B = 0 - H;
                        break;
                    case"ResizeS":
                    case"ResizeSW":
                    case"ResizeSE":
                        if (E == "ResizeSW") {
                            m = p;
                            n = 0 - p
                        } else {
                            if (E == "ResizeSE") {
                                n = p
                            }
                        }
                        B = H;
                        break;
                    case"mceMove":
                        m = p;
                        k = H;
                        break
                }
                if (n < (t = l.features.min_width - q.w)) {
                    if (m !== 0) {
                        m += n - t
                    }
                    n = t
                }
                if (B < (t = l.features.min_height - q.h)) {
                    if (k !== 0) {
                        k += B - t
                    }
                    B = t
                }
                n = Math.min(n, l.features.max_width - q.w);
                B = Math.min(B, l.features.max_height - q.h);
                m = Math.max(m, A.x - (s + A.x));
                k = Math.max(k, A.y - (r + A.y));
                m = Math.min(m, (A.w + A.x) - (s + q.w + A.x));
                k = Math.min(k, (A.h + A.y) - (r + q.h + A.y));
                if (m + k !== 0) {
                    if (s + m < 0) {
                        m = 0
                    }
                    if (r + k < 0) {
                        k = 0
                    }
                    F.moveTo(s + m, r + k)
                }
                if (n + B !== 0) {
                    F.resizeTo(q.w + n, q.h + B)
                }
                return a.cancel(w)
            });
            return a.cancel(G)
        }, resizeBy: function(g, h, i) {
            var f = this.windows[i];
            if (f) {
                f.element.resizeBy(g, h);
                f.iframeElement.resizeBy(g, h)
            }
        }, close: function(i, k) {
            var g = this, f, j = d.doc, h, k;
            k = g._findId(k || i);
            if (!g.windows[k]) {
                g.parent(i);
                return
            }
            g.count--;
            if (g.count == 0) {
                d.remove("mceModalBlocker");
                d.setAttrib(d.doc.body, "aria-hidden", "false");
                g.editor.focus()
            }
            if (f = g.windows[k]) {
                g.onClose.dispatch(g);
                a.remove(j, "mousedown", f.mousedownFunc);
                a.remove(j, "click", f.clickFunc);
                a.clear(k);
                a.clear(k + "_ifr");
                d.setAttrib(k + "_ifr", "src", 'javascript:""');
                f.element.remove();
                delete g.windows[k];
                h = g._frontWindow();
                if (h) {
                    g.focus(h.id)
                }
            }
        }, _frontWindow: function() {
            var g, f = 0;
            e(this.windows, function(h) {
                if (h.zIndex > f) {
                    g = h;
                    f = h.zIndex
                }
            });
            return g
        }, setTitle: function(f, g) {
            var h;
            f = this._findId(f);
            if (h = d.get(f + "_title")) {
                h.innerHTML = d.encode(g)
            }
        }, alert: function(g, f, j) {
            var i = this, h;
            h = i.open({title: i, type: "alert", button_func: function(k) {
                    if (f) {
                        f.call(k || i, k)
                    }
                    i.close(null, h.id)
                }, content: d.encode(i.editor.getLang(g, g)), inline: 1, width: 400, height: 130})
        }, confirm: function(g, f, j) {
            var i = this, h;
            h = i.open({title: i, type: "confirm", button_func: function(k) {
                    if (f) {
                        f.call(k || i, k)
                    }
                    i.close(null, h.id)
                }, content: d.encode(i.editor.getLang(g, g)), inline: 1, width: 400, height: 130})
        }, _findId: function(f) {
            var g = this;
            if (typeof(f) == "string") {
                return f
            }
            e(g.windows, function(h) {
                var i = d.get(h.id + "_ifr");
                if (i && f == i.contentWindow) {
                    f = h.id;
                    return false
                }
            });
            return f
        }, _fixIELayout: function(i, h) {
            var f, g;
            if (!tinymce.isIE6) {
                return
            }
            e(["n", "s", "w", "e", "nw", "ne", "sw", "se"], function(j) {
                var k = d.get(i + "_resize_" + j);
                d.setStyles(k, {width: h ? k.clientWidth : "", height: h ? k.clientHeight : "", cursor: d.getStyle(k, "cursor", 1)});
                d.setStyle(i + "_bottom", "bottom", "-1px");
                k = 0
            });
            if (f = this.windows[i]) {
                f.element.hide();
                f.element.show();
                e(d.select("div,a", i), function(k, j) {
                    if (k.currentStyle.backgroundImage != "none") {
                        g = new Image();
                        g.src = k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/, "$1")
                    }
                });
                d.get(i).style.filter = ""
            }
        }});
    tinymce.PluginManager.add("inlinepopups", tinymce.plugins.InlinePopups)
})();